<?php

 class Medicos_Informantes
 {
     private static $instancia = null;

     private static $id;
     private static $tabla = __class__;
     private static $pk; //cuando la tabla tiene solo una pk
     private static $pks; //cuando la tabla tiene muchas pk, como esta :P
     private static $debug;

     private $data = array();

     private function __construct()
     {
         //print_r($this->data);
     }
     //esta clase entrega un array para recorrerlo
     static public function getInstancia($id, $debug = false)
     {

         if (!self::$instancia instanceof self)
         {
             self::$instancia = new self;
             self::$id = $id;
             self::$tabla = strtolower(self::$tabla);
             /*             self::$tabla = $tabla;
             self::$pk = $pk;*/
             self::$debug = $debug;
             self::$instancia->init(self::$id, self::$debug);
         }
         self::$instancia->init($id, self::$debug);
         return self::$instancia;
     }

     private function init($id, $debug)
     {
         if (isset($id, $debug))
         {
             $db = Zen::Db($debug); //instanciar la DB
             $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
             self::$pks = $db->MetaPrimaryKeys(self::$tabla);
             self::$pk = $pks[0];
             //$pks=join(",", $db->MetaPrimaryKeys('examenes_reserva'));
             $sql = "SELECT * FROM " . self::$tabla . " WHERE " . self::$pk . "='$id'";
             $this->data = $db->GetAll($db->Prepare($sql));
             return true;
         } else
         {
             return false;
         }

     }
     public function Datos()
     {
         return $this->data[0];

     }
     public function DatosArray()
     {
         return $this->data;

     }
     public function Id($indice = 0)
     {
         /* nueva pk */
         /*
         
         $record["res_id"].'___'.$record["ex_codigo"].'___'.$record["exres_fecha"].'___'.$record["exres_hora"]
         
         $record["res_id"].'-'.$record["ex_codigo"].'-'.$record["exres_fecha"].'-'.$record["exres_hora"]
         
         */
         /*
         GENERANDO LA ID PARA UN EXAMEN RESERVADO, EN ESTE ORDEN
         1.- 60 DIGITOS PARA LA ID DE LA RESERVA
         2.- 10 DIGITOS PARA LA ID DEL TIPO DE ATENCION
         3.- 20 DIGITOS PARA LA ID DEL RECURSO
         4.- 8 DIGITOS PARA LA FECHA
         5.- 8 DIGITOS PARA LA HORA
         6.- 30 DIGITOS PARA EL CODIGO DE EXAMEN
         
         */
         return sprintf("%060u", $this->data[$indice]["res_id"]) . sprintf("%010u", $this->
             data[$indice]["tia_id"]) . sprintf("%020u", $this->data[$indice]["rec_id"]) .
             Zen::FechaSoloNumeros($this->data[$indice]["exres_fecha"]) . Zen::
             HoraSoloNumeros($this->data[$indice]["exres_hora"]) . sprintf("%060u", $this->
             data[$indice]["ex_codigo"]);

     }
     public static function DesarmaId($_Ids)
     {
         /*    substr('abcdef', 0, 59);
         //$cont1 = 0;
         foreach ($_Ids as $k => $val)
         {
         $_arrayCampos = array();
         echo 'id '.$val.'<br />';
         $vector=array();
         $vector['res_id'] = (int)substr($val, 0, 58);
         $vector['tia_id'] = (int)substr($val, 59, 68);
         $vector['rec_id'] = (int)substr($val, 69, 88);
         $vector['exres_fecha'] = substr($val, 89, 94);
         $vector['exres_hora']= substr($val, 95, 100);
         $vector['ex_codigo'] = (int)substr($val, 101, 129);
         //$_arrayCampos.=array("res_id" => $id_reserva,"tia_id" => $id_tipo_atencion,"rec_id" => $id_recurso,"exres_fecha" => $fecha,"exres_hora" => $hora,"ex_codigo" => $codigo_examen);
         $_arrayCampos[]= $vector;
         print_r($_arrayCampos);

         //$cont1++;
         }
         return $_arrayCampos;*/


     }

     public function __get($property)
     {

         if (isset($this->data[0][$property]))
         {

             return Zen::Capitalizar($this->data[0][$property]);

         } else
         {

             //return false;
             //return '<strong>No existe el atributo ' . $property . '</strong>';
             return 'Sin Datos';

         }

     }


     public function __set($property, $value)
     {
         //$db = Zen::Db($debug); //instanciar la DB
         $reg = array();
         $reg[$property] = $value;
         $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
         $res = Zen::AutoSql(self::$debug, 'examenes_reserva', $reg, 'UPDATE', "res_id='" .
             self::$id . "'", false, false);
         if ($res)
         {
             self::init(self::$id, self::$debug);
             return true;
         } else
         {
             return false;
         }
     }

     public function __toString()
     {

         return 'No se permite.';

     }
     public function __clone()
     {
         trigger_error("Operación Invalida: No puedes clonar una instancia de " .
             get_class($this) . " class.", E_USER_ERROR);
     }
     public function __wakeup()
     {
         trigger_error("No puedes deserializar una instancia de " . get_class($this) .
             " class.");
     }

 }

?>